package com.studyweb.service;

import com.studyweb.pojo.entity.FileUpload;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 文件上传服务接口
 * 
 * @author StudyWeb Team
 * @since 1.0.0
 */
public interface FileUploadService {
    
    /**
     * 上传文件
     * 
     * @param file 上传的文件
     * @param userId 用户ID
     * @return 上传结果
     * @throws Exception 上传异常
     */
    Map<String, Object> uploadFile(MultipartFile file, Long userId) throws Exception;
    
    /**
     * 根据文件ID获取文件信息
     * 
     * @param fileId 文件ID
     * @return 文件信息
     */
    FileUpload getFileById(Long fileId);
    
    /**
     * 根据用户ID获取文件列表
     * 
     * @param userId 用户ID
     * @return 文件列表
     */
    List<FileUpload> getFilesByUserId(Long userId);
    
    /**
     * 获取所有文件列表
     * 
     * @return 文件列表
     */
    List<FileUpload> getAllFiles();
    
    /**
     * 删除文件
     * 
     * @param fileId 文件ID
     * @param userId 用户ID（用于权限验证）
     * @return 是否删除成功
     */
    boolean deleteFile(Long fileId, Long userId);
    
    /**
     * 批量删除文件
     * 
     * @param fileIds 文件ID列表
     * @param userId 用户ID（用于权限验证）
     * @return 成功删除的文件数量
     */
    int batchDeleteFiles(List<Long> fileIds, Long userId);
    
    /**
     * 根据条件查询文件列表
     * 
     * @param userId 用户ID（可选）
     * @param fileType 文件类型（可选）
     * @param status 状态（可选）
     * @param module 模块（可选）
     * @return 文件列表
     */
    List<FileUpload> getFilesByCondition(Long userId, String fileType, Integer status, String module);
    
    /**
     * 检查文件是否存在
     * 
     * @param fileId 文件ID
     * @return 是否存在
     */
    boolean fileExists(Long fileId);
    
    /**
     * 获取文件内容
     * 
     * @param fileId 文件ID
     * @return 文件内容字节数组
     */
    byte[] getFileContent(Long fileId);
    
    /**
     * 获取用户文件统计信息
     * 
     * @param userId 用户ID
     * @return 统计信息
     */
    Map<String, Object> getUserFileStats(Long userId);
}